package com.horizon.common.entity;

import lombok.AccessLevel;
import lombok.Data;
import lombok.Setter;

import java.time.Instant;
import java.util.HashMap;
import java.util.Map;

/**
 * JWT Token对象
 *
 * @author wangfuwei
 * @version 2018-08-13
 */
@Data
public class Token {

    /**
     * 存储当前Token线程变量
     */
    public static ThreadLocal<Token> TOKEN_LOCAL = new ThreadLocal<>();

    /**
     * 128位加密字符
     */
    public static String SECRET_KEY;

    /**
     * Header Token Key
     */
    public static String TOKEN_KEY;

    /**
     * Token时效(毫秒)
     */
    public static long TOKEN_EXPIRY;

    public Token() {
        this.refresh();
    }

    /**
     * 刷新创建时间与过期时间
     */
    public Token refresh() {
        //创建时间
        this.setCreateTime(Instant.now());
        //过期时间
        this.setExpiryTime(getCreateTime().plusMillis(TOKEN_EXPIRY));
        return this;
    }

    /**
     * 用户主键
     */
    private String primary;

    /**
     * 账号
     */
    private String account;

    /**
     * 姓名
     */
    private String name;

    /**
     * 创建时间
     */
    @Setter(AccessLevel.PRIVATE)
    private Instant createTime;

    /**
     * 过期时间
     */
    @Setter(AccessLevel.PRIVATE)
    private Instant expiryTime;

    /**
     * 额外的属性
     */
    @Setter(AccessLevel.PRIVATE)
    private Map<String, String> extraMap = new HashMap<>();

    /**
     * 设置额外属性
     */
    public void setExtra(String key, String value) {
        this.getExtraMap().put(key, value);
    }
}
